home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / csim / source.lha / source / C++SIM / Examples / Machine.cc < prev    next >
C/C++ Source or Header  |  1993-06-14  |  1KB  |  80 lines

  1. /*
  2.  * Copyright (C) 1993
  3.  *
  4.  * Department of Computing Science,
  5.  * The University,
  6.  * Newcastle upon Tyne,
  7.  * UK.
  8.  */
  9.  
  10. #ifndef MACHINE_H_
  11. #include "Machine.h"
  12. #endif
  13.  
  14. #ifndef JOB_H_
  15. #include "Job.h"
  16. #endif
  17.  
  18. #ifndef QUEUE_H_
  19. #include "Queue.h"
  20. #endif
  21.  
  22.  
  23. extern long ProcessedJobs;
  24. extern long JobsInQueue;
  25. extern long CheckFreq;
  26. extern double MachineActiveTime;
  27. extern Queue JobQ;
  28.  
  29. Machine::Machine (double mean)
  30. {
  31.     STime = new ExponentialStream(mean);
  32.     operational = true;
  33.     working = false;
  34. }
  35.  
  36. Machine::~Machine () { delete STime; }
  37.  
  38. void Machine::Body ()
  39. {
  40.     double ActiveStart, ActiveEnd;
  41.  
  42.     for (;;)
  43.     {
  44.     working = true;
  45.  
  46.     while (!JobQ.IsEmpty())
  47.     {
  48.         ActiveStart = CurrentTime();
  49.         CheckFreq++;
  50.  
  51.         JobsInQueue += JobQ.QueueSize();
  52.         Job* J = JobQ.Dequeue();
  53.         Hold((*STime)());
  54.  
  55.         ActiveEnd = CurrentTime();
  56.         MachineActiveTime += ActiveEnd - ActiveStart;
  57.         ProcessedJobs++;
  58.         delete J;
  59.     }
  60.  
  61.     working = false;
  62.     Cancel();
  63.     set_evtime(CurrentTime());
  64.     }
  65. }
  66.  
  67. boolean Machine::Processing () { return working; }
  68.  
  69. void Machine::Broken () { operational = false; }
  70.  
  71. void Machine::Fixed ()
  72. {
  73.     operational = true;
  74.     set_evtime(CurrentTime());
  75. }
  76.  
  77. boolean Machine::IsOperational () { return operational; }
  78.  
  79. double Machine::ServiceTime () { return (*STime)(); }
  80.